﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common;

namespace Entidades.Models
{
    public class GuionInfo
    {
        #region Constructores

        /// <summary>
        /// Constructor por default
        /// </summary>
        public GuionInfo()
        {
        }

        /// <summary>
        /// Construye un objeto GuionInfo a partir de un Guion
        /// </summary>
        /// <param name="guion"></param>
        public GuionInfo(Guion guion)
        {
            this.Id                             = guion.Id;

            this.Duracion                       = guion.Duracion;
            this.IdProyecto                     = guion.Proyecto != null ? guion.Proyecto.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdAdaptador                    = guion.Adaptador != null ? guion.Adaptador.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdDirector                     = guion.Director != null ? guion.Director.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdEstado                       = guion.Estado != null ? guion.Estado.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdMezclador                    = guion.Mezclador != null ? guion.Mezclador.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdTraductor                    = guion.Traductor != null ? guion.Traductor.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.IdTemporizador                 = guion.Temporizador != null ? guion.Temporizador.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.Loops                          = guion.Loops;
            this.Paginas                        = guion.Paginas;
            this.Personajes                     = guion.Personajes;
            this.Titulo                         = guion.Titulo;
            this.Episodio                       = guion.Episodio.HasValue ? guion.Episodio.Value : 0;
            this.Comentarios                    = guion.Comentarios;
            this.PendienteAutorizacion          = guion.PendienteAutorizacion;
            this.Activo                         = guion.Activo;

            //this.Importacion                    = new GuionImportacionInfo(guion.Importacion);

            #region Auditoria
            this.FechaCreacion                  = guion.FechaCreacion;
            this.IdUsuarioCreacion              = guion.UsuarioCreacion != null ? guion.UsuarioCreacion.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.FechaUltimaModificacion        = guion.FechaUltimaModificacion;
            this.IdUsuarioUltimaModificacion    = guion.UsuarioUltimaModificacion != null ? guion.UsuarioUltimaModificacion.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.FechaTerminacion               = guion.FechaTerminacion.HasValue ? guion.FechaTerminacion.Value : new DateTime?();
            this.IdUsuarioTerminacion           = guion.UsuarioTerminacion != null ? guion.UsuarioTerminacion.Id : WellKnownKeys.Entities.DEFAULT_ID;
            this.FechaCancelacion               = guion.FechaCancelacion.HasValue ? guion.FechaCancelacion.Value : new DateTime?();
            this.IdUsuarioCancelacion           = guion.UsuarioCancelacion != null ? guion.UsuarioCancelacion.Id : WellKnownKeys.Entities.DEFAULT_ID;
            #endregion

            this.Items = new List<GuionItemInfo>();
            if ( guion.Items != null )
            {
                foreach(var item in guion.Items)
                {
                    this.Items.Add ( new GuionItemInfo(item) );
                }
            }
        }

        #endregion

        #region Propiedades

        /// <summary>
        /// Id (PK)
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// Id del Estado del Guión
        /// </summary>
        public int IdEstado { get; set; }

        /// <summary>
        /// Id del Proyecto al que está asociado el Guión
        /// </summary>
        public int IdProyecto { get; set; }

        /// <summary>
        /// Id del Director
        /// </summary>
        public int IdDirector { get; set; }

        /// <summary>
        /// Id del Traductor
        /// </summary>
        public int IdTraductor { get; set; }

        /// <summary>
        /// Id del Adaptador
        /// </summary>
        public int IdAdaptador { get; set; }

        /// <summary>
        /// Id del Mezclador
        /// </summary>
        public int IdMezclador { get; set; }

        /// <summary>
        /// Id del Temporizador
        /// </summary>
        public int IdTemporizador { get; set; }

        /// <summary>
        /// Título
        /// </summary>
        public string Titulo { get; set; }

        /// <summary>
        /// Nro. de Episodio
        /// </summary>
        public int? Episodio { get; set; }

        /// <summary>
        /// Duración
        /// </summary>
        public float Duracion { get; set; }

        /// <summary>
        /// Cantidad de Páginas
        /// </summary>
        public int Paginas { get; set; }

        /// <summary>
        /// Cantidad de Loops
        /// </summary>
        public int Loops { get; set; }

        /// <summary>
        /// Cantidad de Personajes
        /// </summary>
        public int Personajes { get; set; }

        /// <summary>
        /// Items del Guión
        /// </summary>
        public List<GuionItemInfo> Items { get; set; }

        /// <summary>
        /// Comentarios
        /// </summary>
        public string Comentarios { get; set; }

        #region Auditoria
       
        /// <summary>
        /// Fecha Creación
        /// </summary>
        public DateTime? FechaCreacion { get; set; }

        /// <summary>
        /// Id del Usuario Creación
        /// </summary>
        public int IdUsuarioCreacion { get; set; }

        /// <summary>
        /// Fecha Última Modificación
        /// </summary>
        public DateTime? FechaUltimaModificacion { get; set; }

        /// <summary>
        /// Id del Usuario Última Modificación
        /// </summary>
        public int IdUsuarioUltimaModificacion { get; set; }

        /// <summary>
        /// Fecha Terminación
        /// </summary>
        public DateTime? FechaTerminacion { get; set; }

        /// <summary>
        /// Id del Usuario Terminacion
        /// </summary>
        public int? IdUsuarioTerminacion { get; set; }

        /// <summary>
        /// Fecha Cancelación
        /// </summary>
        public DateTime? FechaCancelacion { get; set; }

        /// <summary>
        /// Id del Usuario Cancelación
        /// </summary>
        public int? IdUsuarioCancelacion { get; set; }

        #endregion

        /// <summary>
        /// Activo
        /// </summary>
        public bool Activo { get; set; }

        /// <summary>
        /// Importación
        /// </summary>
        public GuionImportacionInfo Importacion { get; set; }

        /// <summary>
        /// Pendiente de Autorización?
        /// </summary>
        public virtual bool PendienteAutorizacion { get; set; }

        #endregion
    }
}
